css: Change prototype of _gtk_css_selector_matches()
authorBenjamin Otte <otte@redhat.com>
Thu, 29 Dec 2011 13:26:45 +0000 (14:26 +0100)
committerBenjamin Otte <otte@redhat.com>
Mon, 9 Jan 2012 17:37:50 +0000 (18:37 +0100)
Passing the length of the widget path that is relevant is not necessary
anymore, it was only useful for inheritance. Instead, we now pass the
state flags and let the selector do the state matching for us.

gtk/gtkcssprovider.c
gtk/gtkcssselector.c
gtk/gtkcssselectorprivate.h

index e82299bcdb54ec65eff494a482fed2a92a7d5bc9..4aa4429665d9219cfdde4e11ae5559c3805213c8 100644 (file)
@@ -1217,11 +1217,10 @@ gtk_css_ruleset_add (GtkCssRuleset          *ruleset,
 
 static gboolean
 gtk_css_ruleset_matches (GtkCssRuleset *ruleset,
-                         GtkWidgetPath *path)
+                         GtkWidgetPath *path,
+                         GtkStateFlags  state)
 {
-  return _gtk_css_selector_matches (ruleset->selector,
-                                    path,
-                                    gtk_widget_path_length (path));
+  return _gtk_css_selector_matches (ruleset->selector, path, state);
 }
 
 static void
@@ -1415,7 +1414,7 @@ gtk_css_provider_get_style (GtkStyleProvider *provider,
       if (ruleset->style == NULL)
         continue;
 
-      if (!gtk_css_ruleset_matches (ruleset, path))
+      if (!gtk_css_ruleset_matches (ruleset, path, 0))
         continue;
 
       g_hash_table_iter_init (&iter, ruleset->style);
@@ -1456,24 +1455,18 @@ gtk_css_provider_get_style_property (GtkStyleProvider *provider,
   for (i = priv->rulesets->len - 1; i >= 0; i--)
     {
       GtkCssRuleset *ruleset;
-      GtkStateFlags selector_state;
 
       ruleset = &g_array_index (priv->rulesets, GtkCssRuleset, i);
 
       if (ruleset->widget_style == NULL)
         continue;
 
-      if (!gtk_css_ruleset_matches (ruleset, path))
+      if (!gtk_css_ruleset_matches (ruleset, path, state))
         continue;
 
-      selector_state = _gtk_css_selector_get_state_flags (ruleset->selector);
       val = g_hash_table_lookup (ruleset->widget_style, prop_name);
 
-      if (val &&
-          (selector_state == 0 ||
-           selector_state == state ||
-           ((selector_state & state) != 0 &&
-            (selector_state & ~(state)) == 0)))
+      if (val)
         {
           GtkCssScanner *scanner;
 
@@ -1534,18 +1527,13 @@ gtk_css_style_provider_lookup (GtkStyleProviderPrivate *provider,
       GtkCssRuleset *ruleset;
       GHashTableIter iter;
       gpointer key, val;
-      GtkStateFlags selector_state;
 
       ruleset = &g_array_index (priv->rulesets, GtkCssRuleset, i);
 
       if (ruleset->style == NULL)
         continue;
 
-      selector_state = _gtk_css_selector_get_state_flags (ruleset->selector);
-      if ((selector_state & state) != selector_state)
-        continue;
-
-      if (!gtk_css_ruleset_matches (ruleset, path))
+      if (!gtk_css_ruleset_matches (ruleset, path, state))
         continue;
 
       g_hash_table_iter_init (&iter, ruleset->style);
index b3ccb44e47e2655c15f13b81975aa1f13a0eae99..21f34370404a7dc32fb1b9b6918100fec06c6969 100644 (file)
@@ -390,7 +390,7 @@ gtk_css_selector_matches_previous (const GtkCssSelector      *selector,
  * _gtk_css_selector_matches:
  * @selector: the selector
  * @path: the path to check
- * @length: How many elements of the path are to be used
+ * @state: The state to match
  *
  * Checks if the @selector matches the given @path. If @length is
  * smaller than the number of elements in @path, it is assumed that
@@ -403,15 +403,19 @@ gtk_css_selector_matches_previous (const GtkCssSelector      *selector,
 gboolean
 _gtk_css_selector_matches (const GtkCssSelector      *selector,
                            const GtkWidgetPath       *path,
-                           guint                      length)
+                           GtkStateFlags              state)
 {
   GSList *list;
   gboolean match;
+  guint length;
 
   g_return_val_if_fail (selector != NULL, FALSE);
   g_return_val_if_fail (path != NULL, FALSE);
-  g_return_val_if_fail (length <= gtk_widget_path_length (path), FALSE);
 
+  if ((selector->state & state) != selector->state)
+    return FALSE;
+
+  length = gtk_widget_path_length (path);
   if (length == 0)
     return FALSE;
 
index eca5135c2d6043d471a2bdde726a9efbc7e8c4e5..1baaab0512bcecf55360162d203525f6c88e8eed 100644 (file)
@@ -49,7 +49,7 @@ GtkStateFlags     _gtk_css_selector_get_state_flags (GtkCssSelector         *sel
 
 gboolean          _gtk_css_selector_matches         (const GtkCssSelector   *selector,
                                                      const GtkWidgetPath    *path,
-                                                     guint                   length);
+                                                     GtkStateFlags           state);
 int               _gtk_css_selector_compare         (const GtkCssSelector   *a,
                                                      const GtkCssSelector   *b);